home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / game / actio / Wreckage_src.lha / Source / Assembly / asm_3D_B_mul.asm < prev    next >
Assembly Source File  |  1998-06-30  |  2KB  |  165 lines

  1. ;    a0     &ox
  2. ;    a1    &oy
  3. ;    a2    &oz
  4. ;    a3    &oapp
  5. ;    a4    &sincache
  6. ;    d0    templong
  7. ;    sincache(0)=cvaz*32767
  8. ;    sincache(1)=svaz*32767
  9. ;    sincache(2)=cvax*32767
  10. ;    sincache(3)=svax*32767
  11. ;    sincache(4)=cvay*32767
  12. ;    sincache(5)=svay*32767
  13.  
  14.         ;A5-A7 MUST NOT BE TRASHED!!!
  15.  
  16.     MOVE.l    a6    ,-(a7)    ;PUSH a5
  17.     MOVE.l    d1    ,a6    ;load new value
  18.  
  19. _rot_loop1:
  20.  
  21.     MOVE.b     (a3)+    ,d1    ;oapp
  22.       BEQ     _hide_point2    ;(oapp=0)=> skip point
  23.  
  24.  
  25. ;Main Code :)
  26. ;--------
  27.  
  28.     MOVE.w    (a4)    ,d6    ;get cos
  29.     MOVE.w    2(a4)    ,d7    ;get sin
  30.  
  31.       MOVE.l     (a0)+    ,d1    ;d1=ox(n)
  32.      CLR.w     d1
  33.       SWAP     d1
  34.  
  35.       MOVE.w     d1    ,d2    ;d2=x
  36.       MULS.w     d6    ,d1    ;x*csa
  37.  
  38.       MULS.w     d7    ,d2    ;x*sna
  39.  
  40.  
  41.       MOVE.l     (a1)+    ,d3    ;oy(n)
  42.       CLR.w     d3
  43.       SWAP     d3
  44.  
  45.       MOVE.w     d3    ,d4    ;y
  46.  
  47.       MULS.w     d7    ,d3    ;y*sna
  48.       SUB.l     d3    ,d1    ;x*csa-y*sna
  49.  
  50.       MULS.w     d6    ,d4    ;y*csa
  51.       ADD.l     d2    ,d4    ;y*csa+x*sna
  52.  
  53.  
  54.  
  55.     ;d4 holds Y
  56.     ;d1 holds X
  57.  
  58.  
  59. _rot_loop2:
  60. ;      yy=y*cvax-z*svax    
  61. ;      zz=z*cvax+y*svax
  62.  
  63.     MOVE.w    4(a4)    ,d6    ;get cos
  64.     MOVE.w    6(a4)    ,d7    ;get sin
  65.  
  66.       MOVE.l     (a2)+    ,d5    ;d2=oz(n)
  67.      CLR.w     d5
  68.       SWAP     d5
  69.  
  70.       MOVE.w     d5    ,d2    ;d2=z
  71.  
  72.       MULS.w     d6    ,d5    ;z*csa
  73.       MULS.w     d7    ,d2    ;z*sna
  74.  
  75.     CLR.w    d4
  76.     SWAP    d4
  77.       MOVE.w     d4    ,d3    ;y is still here
  78.                 ;   <grin>
  79.  
  80.       MULS.w     d6    ,d3    ;y*csa
  81.       SUB.l     d2    ,d3    ;yy=y*csa-z*sna
  82.  
  83.       MULS.w     d7    ,d4    ;y*sna
  84.       ADD.l     d5    ,d4    ;zz=z*csa+y*sna
  85.  
  86. ;    X    D1
  87. ;    Z    D4
  88. ;    Y    D3 (do not trash)
  89. ;        -----------------
  90.  
  91. _rot_loop3:
  92. ;      xx=x*cvay-z*svay
  93. ;      zz=z*cvay+x*svay
  94.  
  95.     MOVE.w    8(a4)    ,d6    ;get cos
  96.     MOVE.w    10(a4)    ,d7    ;get sin
  97.  
  98.     CLR.W    d4
  99.     SWAP    d4
  100.       MOVE.w     d4    ,d2    ;d2=z (yes, it is still here)
  101.  
  102.       MULS.w     d6    ,d4    ;z*csa
  103.       MULS.w     d7    ,d2    ;z*sna
  104.  
  105.     CLR.w    d1
  106.     SWAP    d1
  107.  
  108.       MOVE.w     d1    ,d5    ;x is still here                ;   (I hope)
  109.       MULS.w     d6    ,d1    ;x*csa
  110.       SUB.l     d2    ,d1    ;xx=x*csa-z*sna
  111.  
  112.       MULS.w     d7    ,d5    ;x*sna
  113.       ADD.l     d4    ,d5    ;zz=z*csa+x*sna
  114.  
  115. ;    X    D1
  116. ;    Y    D3
  117. ;    Z    D5
  118.  
  119.  
  120. ;    And do the 2d->3d Projection
  121.  
  122.  
  123.     CLR.w    d3        ;d3 is a longword..
  124.     SWAP    d3        ;but it is no more
  125.     TST.w     d3
  126.     BLE     _hide_point
  127.     
  128.     MOVE.w    #30000    ,d4    ;use approximate DIV
  129.     SUB.w    d3    ,d4    ;for 3d..
  130.     ASR.l    #8    ,d4
  131.  
  132.     MULS.w    d4    ,d1
  133.     ASR.l    #8    ,d1
  134.     ASR.l    #1    ,d1
  135.     ADD.w    #160    ,d1
  136.  
  137.     MULS.w    d4    ,d5    ;and this is z
  138.     ASR.l    #8    ,d5
  139.     ASR.l    #1    ,d5
  140.     ADD.l    #80    ,d5
  141.  
  142.     MOVE.w    #1    ,d7    ;display point!!
  143.     BRA    _loop_ending
  144.     
  145.         
  146. _hide_point2:
  147.     ADDQ.l    #4    ,a0
  148.     ADDQ.l    #4    ,a1
  149.     ADDQ.l    #4    ,a2
  150.  
  151. _hide_point:
  152.     CLR.w d7
  153.  
  154.  
  155. _loop_ending:
  156.     MOVE.w     d1    ,(a6)+    ;sx
  157.      MOVE.w     d5    ,(a6)+        ;sy
  158.       MOVE.w     d7    ,(a6)+        ;app
  159.  
  160.       SUBQ.l    #1    ,d0    ;n=n-1
  161.       BGT     _rot_loop1
  162.  
  163.  
  164.     MOVE.l    (a7)+    ,a6    ;POP A5
  165.